// 字段对边
// childNode ==> childNode
// props ==> properties
// conditionNode ==> (conditionNodes 配合 conditionType = interflow)
// shuntNode ==> (conditionNodes 配合 conditionType = condition)
function getNodeTitle(type) {
  switch (type) {
    case "O":
      return "发起人节点标题";
    case "E":
      return "审批节点标题";
    case "S":
      return "子程序节点标题";
    case "T":
      return "计时节点标题";
    case "C":
      return "条件节点标题";
    default:
      return "";
  }
}

function guid(type) {
  function S4() {
    return (
      type +
      "_" +
      (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
    );
  }
  return (
    S4() +
    S4() +
    "-" +
    S4() +
    "-" +
    S4() +
    "-" +
    S4() +
    "-" +
    S4() +
    S4() +
    S4()
  );
}

// 发起者数据
function O_DATA() {
  let type = "O";
  let nodeId = guid(type);
  return {
    type: "O",
    content: "",
    nodeId, //节点Id
    conditionNode: [], //条件节点
    shuntNode: [], //分支节点
    childNode: null, //子节点
    props: {
      title: getNodeTitle(type),
      initiator: [], //发起人Id
      initiatePos: [], //发起者岗位
      initiateRole: [], //发起者角色
      hasInitFunc: false, //是否自定义发起事件
      initInterfaceUrl: "", //发起事件请求地址
      initInterfaceType: "GET", //发起事件请求方式
      hasEndFunc: false, //是否自定义结束事件
      endInterfaceUrl: "", //结束事件请求地址
      endInterfaceType: "GET", //结束事件的请求方式
      hasFlowRecallFunc: false, //是否自定义撤回事件
      flowRecallInterfaceUrl: "", //自定义撤回事件请求地址
      hasSubimtBtn: true, //是否有提交按钮
      submitBtnText: "提交审核", //提交按钮的文字
      hasSaveBtn: true, //是否有保存按钮
      saveBtnText: "保存草稿", //保存按钮的文字
      hasPressBtn: true, //是否有催办按钮
      pressBtnText: "催 办", //催办按钮的文字
      hasRevokeBtn: true, //是否有撤回按钮
      revokeBtnText: "撤 回", //撤回按钮上的文字
      hasPrintBtn: true, //是否有打印按钮
      printBtnText: "打 印", //打印按钮的文字
      printId: "", //打印模板的id
    },
  };
}

// 审批者数据
function E_DATA(isBranch) {
  let type = "E";
  let nodeId = guid(type);
  return {
    type: "E",
    content: "",
    nodeId, //节点Id
    prevId: "",
    conditionNode: [], //条件节点
    shuntNode: [], //分支节点
    childNode: null, //子节点
    props: {
      title: getNodeTitle(type),
      approvers: [], //审批人员
      approverPos: [], //审批岗位
      approverRole: [], //审批角色
      assigneeType: 1, //审批人的类型
      circulateRole: [], //抄送角色
      circulatePosition: [], //抄送岗位
      circulateUser: [], //抄送人员
      isCustomCopy: false, //是否自定义抄送人
      progress: "50", //进度设置
      rejectStep: "0", //驳回的设置
      description: "", //描述
      managerLevel: 1, //发起者主管-等级
      countersignRatio: 100, //会签比例
      formField: "", //变量-字段
      nodeId: "", //环节-节点id
      getUserUrl: "", //服务-url
      counterSign: 0, //允许加签
      noApproverHandler: true, //是否或签
      hasFreeApprover: false, //是否会签
      hasAuditBtn: true, //是否有审批通过按钮
      auditBtnText: "通 过", //审批通过按钮文字
      hasRejectBtn: true, //是否有驳回按钮
      rejectBtnText: "拒 绝", //驳回按钮文字
      hasRevokeBtn: true, //是否有撤回按钮
      revokeBtnText: "撤 回", //撤回按钮文字
      hasTransferBtn: true, //是否有转办
      transferBtnText: "转 办", //转办按钮文字
      hasPrintBtn: false, //是否有打印按钮
      printBtnText: "打 印", //打印按钮文字
      printId: "", //打印模板id
      hasSign: false, //是不是需要签名
      messageType: [], //通知设置
      hasApproverFunc: false, //是否自定义审批通过
      approverInterfaceUrl: "", //自定义审批通过的请求地址
      hasApproverRejectFunc: false, //是否自定义拒绝
      approverRejectInterfaceUrl: "", //自定义拒绝的请求地址
      approverInterfaceType: "GET", //自定义审批通过请求类型
      hasRecallFunc: false, //是否自定义撤回
      recallInterfaceUrl: "", //自定义撤回的请求地址
      timeoutConfig: {
        on: false,
        quantity: 1,
        type: "day",
        handler: 1,
      },
    },
  };
}

// 计时器
function T_DATA() {
  let type = "T";
  let nodeId = guid(type);
  return {
    type,
    content: "",
    nodeId,
    prevId: "",
    conditionNode: [], //条件节点
    shuntNode: [], //分支节点
    childNode: null, //子节点
    props: {
      title: getNodeTitle(type),
      day: 0, //天数
      hour: 0, //小时
      minute: 0, //分钟
      second: 0, //秒
    },
  };
}

//条件
function C_DATA() {
  let type = "C";
  let nodeId = guid(type);
  return {
    type,
    content: "",
    nodeId,
    prevId: "",
    conditionNode: [], //条件节点
    shuntNode: [], //分支节点
    childNode: null, //子节点
    initiator: null,
    // priority: 0, //优先级（排序）
    // isDefault: false, //是不是默认（else）
    props: {
      title: getNodeTitle(type),
      conditions: [
        // {
        //   "fieldName": "流程标题",
        //   "symbolName": "大于",
        //   "filedValue": "12",
        //   "logicName": "并且",
        //   "field": "flowTitle",
        //   "symbol": ">",
        //   "logic": "&&"
        // },
      ], //添加的条件数据
    },
  };
}

//子流程
function S_DATA() {
  let type = "S";
  let nodeId = guid(type);
  return {
    type,
    content: "",
    nodeId,
    prevId: "",
    conditionNode: [], //条件节点
    shuntNode: [], //分支节点
    childNode: null, //子节点
    props: {
      title: getNodeTitle(type),
      initiateType: 1, //审批设置方式
      managerLevel: 1, //发起者主管级别
      initiator: [], //指定成员id
      initiatePos: [], //岗位
      initiateRole: [], //角色
      flowId: "", //子流程id
      assignList: [
        // {
        //   parentField: "flowTitle", //当前流程字段
        //   childField: "flowTitle",  //映射到子流程的字段
        // },
      ], //数据传递
      messageType: [1], //通知设置
    },
  };
}

export default function (type, isBranch = false) {
  switch (type) {
    case "O": //start
      return O_DATA();
    case "E": //approver、+isInterflow=true
      return E_DATA(isBranch);
    case "T": //timer
      return T_DATA();
    case "C": //condition
      return C_DATA();
    case "S": //subFlow
      return S_DATA();
    default:
      return null;
  }
}

export { O_DATA, E_DATA, T_DATA, C_DATA, S_DATA };
